iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
Modern Web

Angular TDD (Test-driven development ) 從0到1系列 第 11

Angular TDD 測試從0到1: Day 11 Isolated vs Non-Isolated 測試

  • 分享至 

  • xImage
  •  

什麼是,non-isolated 就是「非隔離測試」,這個方式不建議在做單元測試這樣做,除了與 TDD 精神相反外,還會造成測試程式碼維護的複雜度,所以在測試時要避免將「單元測試」寫成「整合測試」。

那麼 isolated 測試,也就是隔離測試,在撰寫測試的過程中要將測試案例切割很清楚,這個測例檢查 html 的 class、attribute,下個測例驗證service回傳值的正向、在另一個測例驗證反向,諸如此類。一個案例只測一件事。

除此之外,isolated 測試還有另一種解釋,不依賴Angular測試工具,也能寫的測試,像是Pipe用來轉換幣別、日期、時間,或是客製化的,功能面向很單純,就是「轉換字串樣式」。那麼Pipe是如何做到 pure isolated? 來實作看看

  • 製作一個將字串反轉的Pipe
import { Pipe } from "@angular/core";

@Pipe({
  name: 'reverse'
})
export class ReversePipe {
  transform(value: string) {
    return value.split("").reverse().join("");
  }
}
  • 寫Pipe用的spec.ts
    即使沒有應用Angular提供的測試模組,也能做到測試單一案例,line 4 new ReversePipe物件,line 5 調用pipe的transform方法,預期經過轉換後會== olleh
import { ReversePipe } from "./reverse.pipe";
describe('Pipe: ReversePipe', () => {
  it('should reverse the inputs', () => {
    let reversePipe = new ReversePipe();
    expect(reversePipe.transform('hello')).toEqual('olleh');
  });
});

本日心得

「測試框架」是幫助開發者快速開發的工具,有時候在框架久了反而會被框架限制,這次學習上認識到,可以把TestBed... Angular測試模組抽掉,也能寫測試案例。

有時候習慣某種方式使用後,會忘記原始工具的使用原理,就像都市人以為只有「瓦斯爐」能開火,沒有別種方式能把食物煮熟,殊不知最原始的方式,就是「鑽木取火」也能煮飯。

所以同理,在學習的時候,別被框架限制住,掌握基礎知識便能把「點、線、面」兜起來。

本篇是 Anular Unit Test 基礎用法的尾聲,明天開始要學習從專案寫測試。

參考文章來源:


上一篇
Angular TDD 測試從0到1: Day 10 Async vs fakeAsync 測試
下一篇
Angular TDD 測試從0到1: Day 12 導入專案寫測試 (Udemy) - 前言
系列文
Angular TDD (Test-driven development ) 從0到130
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言